Queens that can attack the king¶
Time: O(1); Space: O(1); medium
On an 8 x 8 chessboard, there can be multiple Black Queens and one White King.
Given an array of integer coordinates queens that represents the positions of the Black Queens, and a pair of coordinates king that represent the position of the White King, return the coordinates of all the queens (in any order) that can attack the King.
Example 1:
Input: queens =
[
[0,1], [1,0], [4,0], [0,4], [3,3], [2,4]
],
king = [0,0]
Output: [[0,1], [1,0], [3,3]]
Explanation:
The queen at [0,1] can attack the king cause they’re in the same row.
The queen at [1,0] can attack the king cause they’re in the same column.
The queen at [3,3] can attack the king cause they’re in the same diagnal.
The queen at [0,4] can’t attack the king cause it’s blocked by the queen at [0,1].
The queen at [4,0] can’t attack the king cause it’s blocked by the queen at [1,0].
The queen at [2,4] can’t attack the king cause it’s not in the same row/column/diagnal as the king.
Example 2:
Input: queens =
[
[0,0],[1,1],[2,2],[3,4],[3,5],[4,4],[4,5]
],
king = [3,3]
Output: [[2,2], [3,4], [4,4]]
Example 3:
Input: queens =
[
[5,6], [7,7], [2,1], [0,7], [1,6], [5,1], [3,7], [0,3],
[4,0], [1,2], [6,3], [5,0], [0,4], [2,2], [1,1], [6,4],
[5,4], [0,0], [2,6], [4,5], [5,2], [1,4], [7,5], [2,3],
[0,5], [4,2], [1,0], [2,7], [0,1], [4,6], [6,1], [0,6],
[4,3], [1,7]
],
king = [3,4]
Output: [[2,3], [1,4], [1,6], [3,7], [4,3], [5,4], [4,5]]
Notes:
1 <= len(queens) <= 63
len(queens[0]) == 2
0 <= queens[i][j] < 8
len(king) == 2
0 <= king[0], king[1] < 8
At most one piece is allowed in a cell.
[1]:
class Solution1(object):
def queensAttacktheKing(self, queens, king):
"""
:type queens: List[List[int]]
:type king: List[int]
:rtype: List[List[int]]
"""
directions = [(-1, 0), (0, 1), (1, 0), (0, -1),
(-1, 1), (1, 1), (1, -1), (-1, -1)]
result = []
lookup = {(i, j) for i, j in queens}
for dx, dy in directions:
for i in range(1, 8):
x, y = king[0] + dx*i, king[1] + dy*i
if (x, y) in lookup:
result.append([x, y])
break
return result
[5]:
s = Solution1()
queens = [[0,1], [1,0], [4,0], [0,4], [3,3], [2,4]]
king = [0,0]
assert s.queensAttacktheKing(queens, king) == [[0,1], [1,0], [3,3]]
queens = [[0,0],[1,1],[2,2],[3,4],[3,5],[4,4],[4,5]]
king = [3,3]
print(s.queensAttacktheKing(queens, king))
queens = [
[5,6], [7,7], [2,1], [0,7], [1,6], [5,1], [3,7], [0,3],
[4,0], [1,2], [6,3], [5,0], [0,4], [2,2], [1,1], [6,4],
[5,4], [0,0], [2,6], [4,5], [5,2], [1,4], [7,5], [2,3],
[0,5], [4,2], [1,0], [2,7], [0,1], [4,6], [6,1], [0,6],
[4,3], [1,7]
]
king = [3,4]
print(s.queensAttacktheKing(queens, king))
[[3, 4], [4, 4], [2, 2]]
[[1, 4], [3, 7], [5, 4], [1, 6], [4, 5], [4, 3], [2, 3]]